// *********************  Umwandlung von int bzw. long in ASCII-Zeichen  *********************
//
//  fhrende Nullen knnen unterdrckt werden: trim = 1, sonst trim = 0.
//  "Nachkommastellen" (hier als'.' gedruckt) knnen angegeben werden.
//  Es wird kein! String erzeugt. D.h. ein abschlieendes '\x00' wird nicht gesetzt.


//                         *** Hilfsfunktionen ***
//
char cldigit(long* uiX, unsigned char stelle, unsigned char* print) {
  unsigned long y, wert=1;
  char data;
	while(stelle) {
		wert = wert * 10;
		--stelle;
	}
	y = *uiX/wert;
	if(y || *print) {
		data = y+0x30;
		*uiX -= y*wert;
		*print = 1;
	} else data = ' ';
	return data;
}

unsigned char ltochars(long value, char* asciiChars, unsigned char stellen, unsigned char komma, unsigned char trim) {
  unsigned char print = 0, index = 1;

	if(value < 0) {			// Vorzeichen bearbeiten
		value = -value;
		asciiChars[0] = '-';
	} else {
		if(!trim) {
			asciiChars[0] = ' ';
		} else index=0;
	}

	while(stellen) {		// fr alle Stellen bis auf die Einerstelle
		asciiChars[index] = cldigit(&value, stellen, &print);
		if(komma && komma == stellen) {
			if(asciiChars[index] == ' ') asciiChars[index] = '0';
			asciiChars[++index] = '.';
			print = 1;
		}
		if(!print) {
			if(trim) {
				--index;
			} else {
				if(index > 0) {
					asciiChars[index] = asciiChars[index-1];	// evtl. Vorzeichen mitziehen
					asciiChars[index-1] = ' ';
				}
			}
		}
		++index;
		--stellen;

	}
	asciiChars[index] = value+0x30;					// Einerstelle immer schreiben
	return index+1;
}

// ***************  Prototypen; nur diese Funktionen werden von auen verwendet  ***************
unsigned char itoChars(int value, char* asciiChars, unsigned char komma, unsigned char trim);
unsigned char ltoChars(long value, char* asciiChars, unsigned char komma, unsigned char trim);

// wandelt ein int in ASCII-Zeichen um.
//  der Stringpointer *asciiChars muss auf ein ausreichend groes Array (min. 7) zeigen!
//  Komma gibt die Anzahl "Nachkommastellen" an, trim = 1: fhrende Nullen unterdrcken
//  Rckgabe: Anzahl gltiger Zeichen
unsigned char itoChars(int value, char* asciiChars, unsigned char komma, unsigned char trim) {
	return ltochars((long) value, asciiChars, 4, komma, trim);
}

// wandelt ein long int in ASCII-Zeichen um.
//  der Stringpointer *asciiChars muss auf ein ausreichend groes Array (min. 12) zeigen!
//  Komma gibt die Anzahl "Nachkommastellen" an, trim = 1: fhrende Nullen unterdrcken
//  Rckgabe: Anzahl gltiger Zeichen
unsigned char ltoChars(long value, char* asciiChars, unsigned char komma, unsigned char trim) {
	return ltochars(value, asciiChars, 9, komma, trim);
}

// *********************************************************************************************

